home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 025.lha / LASER STRIKE (.txt) < prev    next >
AmigaBASIC Source Code  |  1987-04-02  |  6KB  |  181 lines

  1. DEFINT a-z:DEFSNG r,g,b
  2. DIM g(1,9,9),c(1,9,9),nh(1,5),xh(1,5),yh(1,5),dx(1,5),dy(1,5),ta(1,5),s(27,8),w1(255),w2(255)
  3. SCREEN 1,320,200,3,1:WINDOW 3,"",(0,0)-(311,186),16,1:WINDOW OUTPUT 3:COLOR 6,0
  4. FOR i=0 TO 255:w1(i)=RND*255-128:w2(i)=RND*255-128:NEXT
  5. RESTORE PaletteData:FOR i=0 TO 7:READ r,g,b:PALETTE i,r,g,b:NEXT
  6. PaletteData:
  7. DATA .13,0,.73,.13,0,.73,1,.73,0,.8,0,.93,.33,.87,0,.8,.2,0,.9,.9,.9,0,.73,.73
  8. RESTORE VoiceData:FOR i=0 TO 8:READ v%(i):NEXT
  9. VoiceData:
  10. DATA 110,0,150,0,22200,64,10,1,0
  11. WIDTH 40:CLS:RANDOMIZE TIMER
  12. FOR co=1 TO 7:CLS:LINE(1,1)-(7,7),co,BF:GET(1,1)-(8,8),s(0,co):NEXT
  13. CLS:LOCATE 11,14:CALL Echo("LASER STRIKE",v%()):PRINT
  14. gx(0)=24:gx(1)=192:gy=64
  15. b$="                            "
  16. RESTORE ShipNames:FOR i=2 TO 5:READ s$(i):NEXT
  17. ShipNames:
  18. DATA Explorer,Fighter,Bomber,Mothership
  19. FOR i=0 TO 1
  20. PRINT "Player"+STR$(i+1);:INPUT p$(i):IF p$(i)="" THEN cp(i)=1:p$(i)="Computer"
  21. NEXT:CLS:LOCATE 7,6:COLOR 1,0:PRINT"GRID 1"SPC(15)"GRID 2"
  22. GOSUB DrawGrid:LOCATE 20,1:COLOR 6,0
  23. FOR n=5 TO 2 STEP-1:l=10-LEN(s$(n))
  24. PRINT SPC(1)s$(n)SPC(13+1)s$(n):NEXT
  25.  
  26. DeployShips:
  27. d=0:FOR pp=0 TO 1:p=ABS(pp-1):ls(p)=5:FOR n=5 TO 2 STEP-1:er=1
  28. WHILE er=1
  29. LOCATE 1,1:PRINT p$(pp)
  30. PRINT"Deploy your "s$(n)".";
  31. FOR i=1 TO n:PUT(i*8+POS(0)*8,8),s(0,n),PSET:NEXT
  32. IF cp(pp)=0 THEN GOSUB Human :ELSE x=INT(RND*(10-n)):y=INT(RND*(10-n))
  33. GOSUB SelectDir
  34. WEND
  35. GOSUB ClearTop:NEXT:GOSUB DrawGrid:NEXT
  36. p=1:d=1:GOSUB ClearTop:PALETTE 1,0.5,0.5,0.5
  37. FOR i=0 TO 1:px(i)=0:py(i)=0:NEXT
  38.  
  39. Mainloop:
  40. WHILE th(p)<14:p=ABS(p-1):pp=p:WHILE INKEY$<>"":WEND
  41. LOCATE 7,6:COLOR p,ABS(p-1):PRINT"GRID 1";:COLOR ABS(p-1),p:PRINT SPC(15)"GRID 2"
  42. LOCATE 1,1:COLOR 0,1:PRINT p$(p)
  43. PRINT"Position and fire laser."
  44. IF cp(p)=0 THEN GOSUB Human :ELSE GOSUB Computer
  45. GOSUB FireLaser:GOSUB PutFigure:GOSUB ClearTop
  46. WEND
  47.  
  48. EndGame:
  49. COLOR 5,0:CLS:LOCATE 11,15:CALL Echo("GAME OVER",v%())
  50. COLOR 4:LOCATE 13,20-LEN(p$(p))/2:CALL Echo(p$(p),v%())
  51. LOCATE 14,9:CALL Echo("Has freed the galaxy!",v%())
  52. COLOR 2:LOCATE 17,12:PRINT"Play again [Y/N]"
  53. SAY TRANSLATE$("play again"),v%:c=1
  54. WHILE k$<>"Y" AND k$<>"N"
  55. k$=UCASE$(INKEY$):c=ABS(c-1)
  56. COLOR 5+c:LOCATE 11,15:PRINT"GAME OVER":FOR i=1 TO 200:NEXT
  57. LOCATE 11,1:PRINT b$:FOR i=1 TO 200:NEXT
  58. WEND
  59. IF k$="Y" THEN RUN
  60. IF k$="N" THEN CLS:END
  61.  
  62. Delay:FOR i=1 TO 1500:NEXT:RETURN
  63.  
  64. ClearTop:LOCATE 1,1:COLOR,d:FOR i=1 TO 5:PRINT b$:NEXT:RETURN
  65.  
  66. PutFigure:PUT(x*8+gx(p),y*8+gy),s(0,co),PSET:pc=c(p,x,y):c(p,x,y)=co:RETURN
  67.  
  68. DrawGrid:
  69. co=7:FOR y=0 TO 9:FOR x=0 TO 9:FOR p=0 TO 1:IF c(p,x,y)<>1 THEN GOSUB PutFigure
  70. NEXT p,x,y:RETURN
  71.  
  72. CheckXY:
  73. IF x<0 OR x>9 THEN er=1
  74. IF y<0 OR y>9 THEN er=1
  75. RETURN
  76.  
  77. FitShip:
  78. x1=x
  79. 80 x1=x1+1:IF x1<=9 THEN IF g(p,x1,y)<>1 THEN 80
  80. xp=x1-x:x1=x
  81. 90 x1=x1-1:IF x1>=0 THEN IF g(p,x1,y)<>1 THEN 90
  82. xn=x-x1:tx=xn+xp-1:y1=y
  83. 100 y1=y1+1:IF y1<=9 THEN IF g(p,x,y1)<>1 THEN 100
  84. yp=y1-y:y1=y
  85. 110 y1=y1-1:IF y1>=0 THEN IF g(p,x,y1)<>1 THEN 110
  86. yn=y-y1:ty=yn+yp-1:RETURN
  87.  
  88. Human:
  89. x=px(p):y=py(p):x1=x:y1=y:co=6:GOSUB PutFigure:k$=""
  90. WHILE k$<>" ":k$=INKEY$
  91. IF k$=CHR$(30) THEN IF x1<9 THEN x1=x1+1
  92. IF k$=CHR$(31) THEN IF x1>0 THEN x1=x1-1  
  93. IF k$=CHR$(28) THEN IF y1>0 THEN y1=y1-1
  94. IF k$=CHR$(29) THEN IF y1<9 THEN y1=y1+1
  95. co=pc:GOSUB PutFigure:x=x1:y=y1:co=6:GOSUB PutFigure
  96. WEND:px(p)=x:py(p)=y:RETURN
  97.  
  98. Computer:
  99. h=0:FOR n=2 TO 5:IF nh(p,n)>0 AND nh(p,n)<n THEN sh=n:h=1
  100. NEXT:IF h=0 THEN 40
  101. x=xh(p,sh):y=yh(p,sh):IF nh(p,sh)>1 THEN 20
  102. FOR i=0 TO 3:pr(i)=0:NEXT
  103. 10 r=INT(RND*4):IF pr(r)=1 THEN 10
  104. dx(p,sh)=0:dy(p,sh)=0:er=0:pr(r)=1:GOSUB FitShip
  105. IF r=0 THEN dx(p,sh)=1:IF tx<sh OR xp<xn THEN er=1
  106. IF r=1 THEN dx(p,sh)=-1:IF tx<sh OR xn<xp THEN er=1
  107. IF r=2 THEN dy(p,sh)=1:IF ty<sh OR yp<yn THEN er=1
  108. IF r=3 THEN dy(p,sh)=-1:IF ty<sh OR yn<yp THEN er=1
  109. x=x+dx(p,sh):y=y+dy(p,sh)
  110. GOSUB CheckXY:IF er=0 THEN IF g(p,x,y)<>1 THEN 50
  111. x=x-dx(p,sh):y=y-dy(p,sh):GOTO 10
  112. 20 x=x+dx(p,sh):y=y+dy(p,sh)
  113. er=0:GOSUB CheckXY:IF er=1 THEN GOSUB 30:GOTO 20
  114. IF g(p,x,y)=1 THEN GOSUB 30:GOTO 20
  115. IF g(p,x,y)=0 THEN GOSUB 30
  116. GOTO 50
  117. 30 IF ta(p,sh)=0 THEN dx(p,sh)=-dx(p,sh):dy(p,sh)=-dy(p,sh):ta(p,sh)=1
  118. RETURN
  119. 40 x=INT(RND*10):y=INT(RND*10)
  120. IF ((x+y) AND 1)=0 THEN 40
  121. IF g(p,x,y)=1 THEN 40
  122. GOSUB FitShip:IF tx<ls(p) AND ty<ls(p) THEN 40
  123. 50 co=6:GOSUB PutFigure:RETURN
  124.  
  125. SelectDir:
  126. IF g(p,x,y)<>0 THEN 70
  127. k$=CHR$(29+INT(RND*2))
  128. IF cp(pp)=0 THEN
  129. PRINT"Horizontal [right] or vertical [down]?"
  130. k$="":WHILE k$<>CHR$(30) AND k$<>CHR$(29):k$=INKEY$:WEND
  131. END IF:er=0
  132. IF k$=CHR$(30) THEN 60
  133. IF y+n-1>9 THEN 70
  134. FOR i=y TO y+n-1:IF g(p,x,i)<>0 THEN er=1
  135. NEXT:IF er=1 THEN 70
  136. y1=y:FOR y=y1 TO y1+n-1:g(p,x,y)=n:IF cp(pp)=0 THEN co=n:GOSUB PutFigure
  137. NEXT:RETURN
  138. 60 IF x+n-1>9 THEN 70
  139. FOR i=x TO x+n-1:IF g(p,i,y)<>0 THEN er=1
  140. NEXT:IF er=1 THEN 70
  141. x1=x:FOR x=x1 TO x1+n-1:g(p,x,y)=n:IF cp(pp)=0 THEN co=n:GOSUB PutFigure
  142. NEXT:RETURN
  143. 70 er=1:IF cp(pp)=0 THEN LOCATE 4,1:COLOR 5:PRINT"INVALID CHOICE":GOSUB Delay
  144. COLOR 6:co=pc:GOSUB PutFigure:GOSUB ClearTop:RETURN
  145.  
  146. FireLaser:
  147. WAVE 0,SIN:WAVE 1,SIN:k=1
  148. FOR i=250 TO 1 STEP -75:k=ABS(k-1):SOUND 660,0.5,i,k
  149. FOR j=1 TO 500:NEXT:SOUND 0,0,0,k:FOR j=1 TO 500:NEXT:NEXT
  150. n=g(p,x,y)
  151. IF n=0 THEN PRINT"MISS!":GOSUB Delay:co=1:g(p,x,y)=1:RETURN
  152. IF n=1 THEN PRINT"ALREADY HIT":co=pc:GOSUB Delay:RETURN
  153. co=n:PRINT"DIRECT HIT!"
  154. WAVE 0,w1:WAVE 1,w2
  155. FOR i=255 TO 10 STEP-10:SOUND 100,0.1,i,0:SOUND 100,0.1,i,3:FOR j=1 TO RND*20:NEXT:NEXT
  156. nh(p,n)=nh(p,n)+1:th(p)=th(p)+1
  157. g(p,x,y)=1:PUT((10+23*p+nh(p,n))*8,(24-n)*8),s(0,n),PSET
  158. IF n<>nh(p,n) THEN
  159. xh(p,n)=x:yh(p,n)=y
  160. ELSE
  161. FOR i=2 TO 5:IF nh(p,i)=0 THEN ls(p)=i
  162. NEXT
  163. IF n<>4 THEN
  164. SAY TRANSLATE$(s$(n)+" deestroyed"),v%:c=1
  165. ELSE
  166. SAY TRANSLATE$("bommer deestroyed"),v%:PRINT  s$(n)
  167. END IF
  168. FOR i=1 TO 10:c=ABS(c-1):COLOR n+(6-n)*c,c
  169. LOCATE 4,20-LEN(s$(n))/2:PRINT UCASE$(s$(n))
  170. LOCATE 5,15:PRINT"DESTROYED!":FOR j=1 TO 50:NEXT:NEXT
  171. END IF
  172. FOR i=1 TO 500:NEXT:RETURN
  173.  
  174. SUB Echo(s$,v%(1)) STATIC
  175. SAY TRANSLATE$(s$),v%:PRINT s$:END SUB
  176.  
  177.  
  178.  
  179.  
  180.  
  181.